package core.jogadores;

import core.arvore.Node;
import core.jogo.Tabuleiro;
import core.redeNeural.RedeNeural;
import core.util.Temporizador;
import view.Jogador;

public class JogadorMutanteArvore implements Jogador{

	private RedeNeural rede;
	private int profundidadeMax;

	public JogadorMutanteArvore(RedeNeural rede, int profundidadeMax){
		this.profundidadeMax = profundidadeMax;
		this.rede = rede;
	}

	public int[] jogar(int[] casas) {
		Temporizador.getInstancia().iniciarContador();
		Node n = new Node(true, getRede(), new Tabuleiro(casas), profundidadeMax);		
		n.getValue(-1);
		//Se não for tempo crítico, começa uma busca de profundidade + 2
		int i=2;
		while(!Temporizador.getInstancia().isTempoCritico()){
			Node n2 = new Node(true, getRede(), new Tabuleiro(casas), profundidadeMax + i);
			n2.getValue(-1);
			//Se não for tempo crítico, essa é a melhor jogada em profundidade + 2
			if(!Temporizador.getInstancia().isTempoCritico()){
				n = n2;
				System.out.println("Aprofundou!");
			}
			i = i+2;
		}
		if(n.getMelhorJogada() != null)
			return n.getMelhorJogada().getCasas();
		else
			return null;
	}
	
	public RedeNeural getRede() {
		return rede;
	}

	public void setRede(RedeNeural rede) {
		this.rede = rede;
	}

	public int getProfundidadeMax() {
		return profundidadeMax;
	}

	public void setProfundidadeMax(int profundidadeMax) {
		this.profundidadeMax = profundidadeMax;
	}


}
